"""
重置向量数据库并重新加载文档脚本
用于应用新的文档分割策略
"""
import sys

def reset_and_reload():
    """重置数据库并重新加载文档"""
    print("初始化服务...")
    
    # 先尝试手动删除数据库文件（如果存在）
    import os
    import shutil
    db_dir = "vector_db"
    if os.path.exists(db_dir):
        try:
            print(f"尝试删除旧数据库目录: {db_dir}")
            shutil.rmtree(db_dir)
            print("旧数据库目录已删除")
        except Exception as e:
            print(f"删除旧数据库目录时出错: {str(e)}")
            print("请确保没有其他进程正在使用该数据库")
    
    # 使用默认实例
    from backend.knowledge_service import knowledge_service
    
    # 重置数据库（如果可能）
    try:
        print("尝试重置向量数据库...")
        # 通过knowledge_service访问db_manager
        if hasattr(knowledge_service, 'db_manager'):
            if knowledge_service.db_manager.reset_database():
                print("数据库重置成功")
            else:
                print("警告: 数据库重置可能不完全成功")
    except Exception as e:
        print(f"重置数据库时出错: {str(e)}")
    
    # 设置知识库目录
    knowledge_base_dir = os.path.join(os.getcwd(), "knowledge_base")
    print(f"从目录加载文档: {knowledge_base_dir}")
    
    # 添加文档
    try:
        success = knowledge_service.add_documents_from_directory(knowledge_base_dir)
        if success:
            print(f"文档加载成功")
        else:
            print("警告: 文档加载可能不完整")
    except Exception as e:
        print(f"添加文档时出错: {str(e)}")
    
    # 验证文档数量
    try:
        if hasattr(knowledge_service, 'db_manager'):
            doc_count = knowledge_service.db_manager.count_documents()
            print(f"向量数据库中的文档数量: {doc_count}")
    except Exception as e:
        print(f"获取文档数量时出错: {str(e)}")
    
    # 测试搜索
    print("\n测试搜索 'RAG的优势是什么？':")
    try:
        results = knowledge_service.search_knowledge("RAG的优势是什么？", k=3)
        
        # 打印结果类型和结构
        print(f"搜索结果类型: {type(results)}")
        
        if results:
            # 处理字典格式的结果
            if isinstance(results, dict) and 'results' in results:
                actual_results = results['results']
                total = results.get('total_results', len(actual_results))
                print(f"找到 {total} 个结果:")
                
                for i, result in enumerate(actual_results, 1):
                    content = result.get('content', '')
                    similarity = result.get('similarity_score', 0)
                    metadata = result.get('metadata', {})
                    section_title = metadata.get('section_title', '未知章节')
                    
                    # 特别检查是否包含RAG优势相关内容
                    has_advantages = '优势' in content or '优势' in section_title
                    
                    print(f"\n结果 {i}:")
                    print(f"章节标题: {section_title}")
                    print(f"相似度: {similarity:.2f}%")
                    print(f"是否包含'优势'相关内容: {'是' if has_advantages else '否'}")
                    print(f"内容预览: {content[:200]}...")
                    
                    # 如果包含RAG优势，突出显示
                    if has_advantages:
                        print("\n🔥 找到相关内容!")
            else:
                print("结果不是预期的格式")
        else:
            print("未找到相关结果")
    except Exception as e:
        print(f"搜索时出错: {str(e)}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    try:
        reset_and_reload()
        print("\n重置和重新加载完成")
    except Exception as e:
        print(f"运行过程中出错: {str(e)}")
        import traceback
        traceback.print_exc()
        sys.exit(1)